//
//  main.swift
//  Swift_lesson2
//
//  Created by lanou刘刚 on 15/11/24.
//  Copyright © 2015年 刘刚. All rights reserved.
//

import Foundation

//print("Hello, World!")
//
//func sss(arr:Array<Int>) -> (Int, String, Array<Int>){
//    return (2, "123", arr)
//}
//
//print(sss([3, 4, 5]))


/****************   结构体   *******************/


// 声明一个结构体
// struct(关键字) + 结构体名字{

//        结构体内部实现的代码
//}

// 存储属性：目的是为了存储值
// 计算属性





//struct Rect {
//    
////    定义一个结构体属性
//    static  var name : Float {
//        get {
//            return 100
//        }
//    }
//    var x : Float
//    var y : Float
//    var width :Float
//    var height: Float
//    
////    计算属性：专门计算存储属性的一个变量
//    
//    var centerX:Float{
//        
////        实现计算属性的getter和setter方法
////        在Swift中不能只定义setter方法，如果需要setter方法，则需要实现getter方法之后去实现getter方法
//        get {
//            return x + width / 2
//        }
//
//        set {
////            newValue ：新的值
////             newValue 自带的参数，代表的一个新的值
//            centerX = newValue
//        }
//        
//    }
//    var centerY:Float {
//
//        set {
//            centerY = newValue
//        }
//
//        get {
//            return y + height / 2
//        }
//        
//    }
////    结构体第一个变化：可以实现初始化方法, 不需要添加func标识
////
//    init(x : Float, y : Float, width : Float, height : Float)
//    {
//        self.x = x
//        self.y = y
//        self.width = width
//        self.height = height
//    }
////    2. 在结构体里面可以定义一些函数
////    4. 在一个函数的前面加上mutating修饰，可以在函数里面修改结构体参数的值，如果不加，则在函数内部不可以修改
//    func descript(){
//        print("x = \(self.x), y = \(self.y), width = \(self.width), height = \(self.height)")
//        
//    }
//    mutating func sayHello(){
//        self.x = 300
//        
//        print("给你讲个笑话，打字慢的孩子不光没人疼，还虚")
//    }
//    
////    结构体方法
////    3.定义一个结构体函数，和OC中的类方法是一样的
////    用static标识，Swift中的static并不表示在静态区的声明一个变量
//    static func sayNiHao() {
//        print("鲁大师回来了")
//    }
//    
//    
//    
//    
//}
//
//
//
//var newRect = Rect(x: 1.0, y: 2.0, width: 100, height: 100)
//print("newRect.x = \(newRect.x), newRect.y= \(newRect.y), newRect.width= \(newRect.width), newRect.height = \(newRect.height)")
//newRect.descript()
//newRect.sayHello()
//
//Rect.sayNiHao()
//



// 定义一个类
// 格式
// class(关键字) + 类名：父类{
//类中实现的代码
//}


class Perosn {
    
//    可以把这个变量设置为nil
    var name : String?

    var age : Int?
    
static var gender : String?

private var hobby : String?



init(name : String, age : Int){
self.name = name
 self.age = age

}

//  用static标识一个变量的时候，标识它是一个类属性
    
// 声明一个类函数，OC中的类方法
    func sayDes(){
        print("name \(self.name), age:\(self.age)")
    }
    

//   static修饰的类函数，子类是不能重写的，class修饰的类函数，是能够被子类重写的
//    在类方法中是不能直接调用属性的，只能调用类属性
   static func sayHI(){

     self.gender = "man"
let person = Perosn(name: "金箍棒的主人", age: 500)

 



person.sayDes()



}

    class func sayHello() {
        print("hello")
    }


    
}
var person = Perosn(name: "郭栋", age: 998)
person.hobby = "韩毅璐"
//person.name = "张三"
print(person.name)
print("我叫\(person.name), 今年\(person.age),我的爱好是\(person.hobby)")
Perosn.sayHello()
//Perosn.sayDes(person)

// 声明一个类，继承父类
class student: Perosn {
//    子类如果想重写父类的方法需要添加一个overrider标识
    override func sayDes() {

// 继承父类的方法，并添加新的功能
super.sayDes()




}

}













